function Person(name, gender, age) { /* Code04 */
    this.name = name;
    this.gender = gender;
    this.age = age;

    function print() {
        console.log(this.name, this.gender, this.age);
    }
}

// 在子对象中调用父对象的构造函数
function Sinaean(name, gender, age) {
    let self = this;
    console.log(name, gender, age);
    // 使用 call 来调用 Person 函数 (即相当于调用了父类的构造函数)
    Person.call(self, name, gender, age);
    // Person.apply(this, [name, gender, age]);
}

// 创建一个 Person 实例 作为 Sinaean 对象的原型
Sinaean.prototype = new Person();

// 因为 Sinaean 内部没有处理它的参数，所以这里传入的三个参数没意义
let s = new Sinaean("张三丰", 108, "男");

console.log(s.name, s.hasOwnProperty('name')); // 张三丰 true